package com.tedu.api.io;

import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.logging.Filter;

/**
 * ListFiles(接口：Filter)
 * 作用：按照”指定规则"获取对应文件/文件夹
 *
 * Filter接口---专门给listFiles方法提供：过滤文件夹或者文件【指定规则】
 * accept()从每个File的文件中判断，拿到【具体逻辑】的文件夹
 * 需求：获取  API  项目下  所有子项【文件和文件夹】   获取src文件
 *    指定规则：验证时s开头就是src
 *    作业：FileFilter接口按照  匿名内部类  方式  实现   功能如上实现
 *    接口：  FileFilter   ff=new FileFilter()    {accept() }
 */
public class FilterAPI {
    //主方法：./  路径指定根级
    public static void main(String[] args) throws IOException {
        //1.创建File文件类:获取  API  项目下    路径：./
        File file=new File("."+File.separator+"API");
        System.out.println(file.getCanonicalPath());
        //4.创建FileFilter接口对象--无法直接创建：实现类--实现--接口【创建】
        MyFilter my=new MyFilter();
        //2.获取文件夹下所有“子项”：文件夹下包括所有文件和文件夹
        File[] subs=file.listFiles(my);
        //3.打印子项下所有名字
        for (int i=0;i<subs.length;i++){
            System.out.println("所有文件和文件夹名："+subs[i].getName());
        }
    }
    //单元测试：./路径指定父级
    @Test
    public void test01() throws IOException {
//创建File文件类:获取  API  项目下    路径：./
        File file=new File("."+File.separator);
        System.out.println(file.getCanonicalPath());
    }
}
//创建实现类---实现--FileFilter接口--对象创建
class MyFilter implements FileFilter{

    //accept(File pathname)
    //传入参数：File pathname--获取所有需要过滤的文件
    //作用：添加过滤条件，将获取所有需要过滤的文件
    //      逐一过滤，【条件：规则--开发者指定】条件
    //      满足返回true，输出，条件不满足反之
    public boolean accept(File pathname) {//回调函数
      // accept //添加规则：文件或者文件是  s 开头的--过滤
        //①获取所有文件夹名字
        String name=pathname.getName();   //文件夹：  src  字符串
        //②过滤以   s  开头的文件夹
        // 字符串：starWith()      返回值boolean
        // 作用：验证字符串首字符是不是匹配字符 ，如果匹配：true，反之不匹配
        // ③打印过滤出现的字符串
               System.out.println("过滤出来的文件夹名字是："+name);
        return name.startsWith("A");

    }
}
